package mySeHomework.homework1;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.api.DisplayName;
import static org.junit.jupiter.api.Assertions.*;

import cn.edu.ctgu.junitTest.PreminumCaculator;
import cn.edu.ctgu.junitTest.ValueParseException; 

public class PreminumCaculatorTest {

    private    PreminumCaculator preminumCaculator = new  PreminumCaculator() ;
    @ParameterizedTest(name = "age={0}, sex={1} , isMarried={2} ,raisenum={3}  , result ={4} ")
    @CsvSource({      
        // "-10 ,'M' , 'N' ,5",
        "21 , 'M' , 'Y' ,2, 12",
        // "20 , 'F' , 'N' ,5",
        // "19 , 'M' , 'N' ,1",
        // "135 ,'M' , 'N' ,1",
        // "40 , 'T' , 'N' ,1",
        // "59 , 'M' , 'T' ,1"
    })
    @DisplayName("异常断言")
    void sumValidCases(int age , char sex ,char isMarried , int raisenum , double result  ) {
        // preminumCaculator.getAllNums(age, sex, isMarried, raisenum) ; 
        // System.out.println(preminumCaculator.getRaiseNum());
        // System.out.println(preminumCaculator.getAgeNum());
        // System.out.println(preminumCaculator.getIsMarriedNum());
        // System.out.println(preminumCaculator.getSexNum());
        // System.out.println(preminumCaculator.getAllNums(age, sex, isMarried, raisenum));
        Assertions.assertEquals(result, preminumCaculator.getAllNums(age, sex , isMarried , raisenum));
    }

    @ParameterizedTest(name = "age={0}, sex={1} , isMarried={2} ,raisenum={3} ")
    @CsvSource({      
        "-10 ,'M' , 'N' ,5",
        "21 , 'M' , 'Y' ,2" ,
        "20 , 'F' , 'N' ,5",
        "19 , 'M' , 'N' ,1",
        "135 ,'M' , 'N' ,1",
        "40 , 'T' , 'N' ,1",
        "59 , 'M' , 'T' ,1"
    })
    void vaildRaiseCase( int age , char sex ,char isMarried , int raisenum ){
        preminumCaculator.setall(age, sex, isMarried, raisenum);
        Throwable throwable_1 = assertThrows(ValueParseException.class, () ->{
            preminumCaculator.getRaiseNum();
          }) ;
          Throwable throwable_2 = assertThrows(ValueParseException.class, () ->{
            preminumCaculator.getSexNum();
          }) ;
          Throwable throwable_3 = assertThrows(ValueParseException.class, () ->{
            preminumCaculator.getIsMarriedNum();
          }) ;
          // assert
          assertAll(
           () -> assertEquals("抚养人数数据错误",throwable_1.getMessage()) ,
           () -> assertEquals("性别数据错误",throwable_2.getMessage()) ,
           () -> assertEquals("婚配数据错误",throwable_3.getMessage()) 
          );
    }

    
}
package cn.edu.ctgu.junitTest; 

public class ValueParseException extends RuntimeException {
    /**
     * 
    */
    private static final long serialVersionUID = 1L;

    public ValueParseException() {
    }

    public ValueParseException(String message) {
        super(message);
    }

    public ValueParseException(Throwable cause) {
        super(cause);
    }

    public ValueParseException(String message, Throwable cause) {
        super(message, cause);
    }
}